const regexp = {
  space: /[\S]+/, //空字符串
  num: /^-?\d*\.?\d+$/, //数字（正、负、小数）
  numn: /^\d*\.?\d+$/, //非负数字（正，小数）
  int: /^[0-9]*[1-9][0-9]*$/, //正整数
  integer: /^-?\d+$/, //整数（正，负）
  decimal: /^([-+]?[1-9]\d*\.\d+|-?0\.\d*[1-9]\d*)$/, //小数（必须带小数）
  decimaln: /^([1-9]\d*\.\d+|-?0\.\d*[1-9]\d*)$/, //非负小数（必须带小数）
  phone: /^1[3456789]\d{9}$/, //手机号码
  email: /^([a-zA-Z0-9]+[_|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/,
  captcha: /^[0-9]{6}$/, //验证码
  account: /^[0-9A-Za-z]+$/, //包含数字和英文字母
  url: /^([a-zA-Z]+:\/\/)?([\w-.]+)(\.[a-zA-Z0-9]+)(:\d{0,5})?\/?([\w-/]*)\.?([a-zA-Z]*)\??(([\w-]*=[\w%]*&?)*)$/,

  s_num: /^$|^-?\d*\.?\d+$/,
  s_numn: /^$|^\d*\.?\d+$/,
  s_int: /^$|^[0-9]*[1-9][0-9]*$/,
  s_integer: /^$|^-?\d+$/,
  s_decimal: /^$|^([-+]?[1-9]\d*\.\d+|-?0\.\d*[1-9]\d*)$/,
  s_decimaln: /^$|^([1-9]\d*\.\d+|-?0\.\d*[1-9]\d*)$/,
  s_phone: /^$|^1[3456789]\d{9}$/,
  s_email: /^$|^([a-zA-Z0-9]+[_|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/,

  idCard: function (v) {
    const _reg = /^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2]))\d{4}(([1][9]\d{2})|([2]\d{3}))(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1]))\d{3}[0-9xX]$/
    if (_reg.test(v)) {
      let a = [v.substr(10, 2), v.substr(12, 2), v.substr(6, 4)],
        t = Date.parse(a.join('-')),
        n = Date.parse(new Date()),
        d = new Date(a[2], a[0], 0).getDate()
      if (t > n || a[1] > d) return false
      let c = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2), //系数
        b = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'), //校验码对照表
        ia = v.split(''),
        sum = 0
      for (let k = 0; k < 17; k++) {
        sum += parseInt(ia[k]) * parseInt(c[k])
      }
      if (ia[17].toUpperCase() == b[sum % 11].toUpperCase()) {
        return true
      } else return false
    } else return false
  },
  name: function (val) {
    let r = /((^[\u4E00-\u9FA5]{2,5}$)|(^[a-zA-Z]+[\s.]?([a-zA-Z]+[\s.]?){0,4}[a-zA-Z]$))/
    val = val.replace(/^\s+/g, '')
    val = val.replace(/\s+$/g, '')
    return r.test(val)
  }
}
export default regexp

//为空
export function isSpace(v) {
  if (v == null) return true
  return !regexp.space.test(v)
}
//验证数字(double类型) [可以包含负号和小数点]
export function isNumber(v) {
  return regexp.num.test(v)
}
//非负数字
export function isNumberNN(v) {
  return regexp.numn.test(v)
}
//验证正整数
export function isInt(v) {
  return regexp.int.test(v)
}
//验证整数
export function isInteger(v) {
  return regexp.integer.test(v)
}
//验证小数（必须带小数）
export function isDecimal(v) {
  return regexp.decimal.test(v)
}
//非负小数（必须带小数）
export function isDecimalNN(v) {
  return regexp.decimaln.test(v)
}
//验证手机号码
export function isPhone(v) {
  return regexp.phone.test(v)
}
//验证电子邮箱
export function isEmail(v) {
  return regexp.email.test(v)
}
export function isAccount(v) {
  return regexp.account.test(v)
}
//验证码
export function isCaptcha(v) {
  return regexp.captcha.test(v)
}
export function isURL(v) {
  return regexp.url.test(v)
}
//验证身份证号 [可验证一代或二代身份证]
export function isIDCard(v) {
  return regexp.idCard(v)
}
//验证中文或英文名字
export function isName(v) {
  return regexp.name(v)
}
